package com.xdxc.utils;

import org.springframework.security.core.context.SecurityContextHolder;

/**
 * 用于在异步任务中传递 Token 的工具类（基于 ThreadLocal）
 */
public class TokenHolder {
    private static final ThreadLocal<String> TOKEN_HOLDER = new ThreadLocal<>();

    /**
     * 设置当前线程的 Token
     */
    public static void setToken(String token) {
        TOKEN_HOLDER.set(token);
    }

    /**
     * 获取当前线程的 Token
     */
    public static String getToken() {
        // 优先从 SecurityContext 获取（同步场景）
        try {
            if (SecurityContextHolder.getContext().getAuthentication() != null) {
                return (String) SecurityContextHolder.getContext().getAuthentication().getCredentials();
            }
        } catch (Exception ignored) {
            // 异步场景可能无法获取 SecurityContext
        }

        // 从 ThreadLocal 获取（异步场景）
        return TOKEN_HOLDER.get();
    }

    /**
     * 清除当前线程的 Token（防止内存泄漏）
     */
    public static void clear() {
        TOKEN_HOLDER.remove();
    }
}